package cn.itcast.web.shiro;

import org.apache.shiro.authc.AuthenticationInfo;
import org.apache.shiro.authc.AuthenticationToken;
import org.apache.shiro.authc.credential.SimpleCredentialsMatcher;
import org.apache.shiro.crypto.hash.Md5Hash;

/**
 * 自定义凭证匹配器,指定密码的加密算法
 */
public class CustomCredentialsMatcher extends SimpleCredentialsMatcher {

    /**
     * 指定对用户输入密码加密规则、以及校验
     * @param token 封装用户输入的账号密码 subject.login(authenticationToken)
     * @param info 对应realm中认证方法返回的对象，封装数据库中正确的密码等。
     * @return
     */
    @Override
    public boolean doCredentialsMatch(AuthenticationToken token, AuthenticationInfo info) {
        //1. 获取用户输入的email
        String email = (String) token.getPrincipal();

        //2. 获取用户输入的密码
        String inputPwd = new String((char[]) token.getCredentials());

        //3. 对用户输入的密码加密、email作为盐
        String encodePwd = new Md5Hash(inputPwd,email).toString();

        //4. 获取数据库中正确的密码
        String dbPwd = (String) info.getCredentials();

        //5. 判断  （3 VS 4）
        return encodePwd.equals(dbPwd);
    }
}
